CloudWatch Logsの機密情報保護をCloudFormationで設定する #reinvent
Amazon CloudWatch Logsで、機密情報を保護できるようになりました。
本記事では、CloudFormationでデータ保護を設定してみました。
おすすめの方
- Amazon CloudWatch Logsのデータ保護機能をCloudFormationで利用したい方
CloudFormationテンプレート
適当なロググループと動作確認用のIAMロールを作成します。
動作確認用のIAMロールには、logs:Unmask
権限がありません。
なお、指定するARNは次のドキュメントを参照してください。
AWSTemplateFormatVersion: '2010-09-09' Parameters: LambdaLogGroupNamePrefix: Type: String Default: /aws/lambda Resources: TestFunctionLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub ${LambdaLogGroupNamePrefix}/test-2022-12 DataProtectionPolicy: Name: test-2022-12-data-protection-policy Version: 2021-06-01 Statement: - DataIdentifier: - arn:aws:dataprotection::aws:data-identifier/EmailAddress # 監査結果の送信は設定しない Operation: Audit: FindingsDestination: {} - DataIdentifier: - arn:aws:dataprotection::aws:data-identifier/EmailAddress # 監査結果の送信は設定しない Operation: Deidentify: MaskConfig: {} # 動作確認用のIAMロール CloudWatchReadOnlyMaskRole: Type: AWS::IAM::Role Properties: RoleName: cloudwatch-read-only-mask-role AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: sts:AssumeRole Principal: AWS: - !Sub ${AWS::AccountId} # 実際には最小限なAssumeRole元を指定してください。 Policies: - PolicyName: cloudwatch-read-only-mask-policy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - logs:DescribeLogGroups - logs:DescribeLogStreams - logs:GetLogEvents # - logs:Unmask 設定しない Resource: "*"
デプロイ
aws cloudformation deploy \ --template-file logs.yaml \ --stack-name CloudWatch-Data-Protection-Test-Stack \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset
メールアドレスをロググループに送信し、マスク表示を確認する
CloudWatchに対する全権限を持っているユーザ(IAMロール)で操作します。
作成したロググループに適当なログストリームを作成し、テスト用のログイベントを送信します。
メールアドレスがマスク表示されました。
動作確認
unmask権限がある場合、メールアドレスが表示される
「Temporarily unmask protected data」を選択します。
マスクが解除されて、メールアドレスが表示されました。
unmask権限がない場合、メールアドレスが表示されない
動作確認用のIAMロールに切り替えて、同様の操作をおこないます。
結果は表示されませんでした。
すべてがmaskされたログの場合は、一時的に表示が消えるみたいです。 再読み込み(リロード)すると「****」が表示されます。
さいごに
Amazon CloudWatch Logsの機密情報保護をCloudFormationで設定してみました。 実際に運用する場合に役立つと思います。